package com.dkd.sbtz.domain;

import java.util.Date;
import java.util.List;

import com.dkd.sbtz.domain.vo.spare.SpecialItemDTO;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.dkd.common.annotation.Excel;
import com.dkd.common.core.domain.BaseEntity;
import org.apache.ibatis.type.Alias;

/**
 * 设备计划维护对象 asset_mtplan
 * 
 * @author xzj
 * @date 2025-09-19
 */
@Alias("AssetMtplan")
@Data
public class AssetMtplan extends BaseEntity
{
    private static final long serialVersionUID = 1L;

    /** 主键ID */
    private Long id;

    /** 设备ID（关联 asset_node.id） */
    @Excel(name = "设备ID", readConverterExp = "关=联,a=sset_node.id")
    private Long assetId;

    private Long assetmentId;

    /** 设备名称（列表 join 展示用） */
    private String assetName;

    /** 计划标题（便于列表识别） */
    @Excel(name = "计划标题", readConverterExp = "便=于列表识别")
    private String title;

    /** 计划维护日期（页面字段） */
    @Excel(name = "计划维护日期", readConverterExp = "页=面字段")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date planDate;

    /** 计划维护内容（页面字段） */
    @Excel(name = "计划维护内容", readConverterExp = "页=面字段")
    private String planContent;

    /** 是否需要备件：0-否 1-是（页面字段） */
    @Excel(name = "是否需要备件：0-否 1-是", readConverterExp = "页=面字段")
    private Integer needSpare;

    /** 计划维护工种代码（页面字段，字典码） */
    @Excel(name = "计划维护工种代码", readConverterExp = "页=面字段，字典码")
    private String tradeCode;

    /** 优先级 */
    @Excel(name = "优先级")
    private String priority;

    /** 计划类型：保养/点检/修复 */
    @Excel(name = "计划类型：保养/点检/修复")
    private String planType;

    /** 允许开始窗口（可空） */
    @Excel(name = "允许开始窗口", readConverterExp = "可=空")
    private Date windowStart;

    /** 允许结束窗口（可空） */
    @Excel(name = "允许结束窗口", readConverterExp = "可=空")
    private Date windowEnd;

    /** 预估工时（分钟） */
    @Excel(name = "预估工时", readConverterExp = "分=钟")
    private Long estDurationMin;

    /** 目标班组（如MECH/ELEC，或与工种同源） */
    @Excel(name = "目标班组", readConverterExp = "如=MECH/ELEC，或与工种同源")
    private String assigneeGroup;

    /** 预指派负责人（可空） */
    @Excel(name = "预指派负责人", readConverterExp = "可=空")
    private Long assigneeUserId;

    /** 周期类型 */
    @Excel(name = "周期类型")
    private String cycleType;

    /** 周期数值，如每3月一次=&gt;MONTH,3 */
    @Excel(name = "周期数值，如每3月一次=&gt;MONTH,3")
    private Integer cycleValue;

    private Integer isDelete;

    private Long parentAssetId;

    private Integer source;

    /** 系统计算的下次计划日期（可空） */
    @Excel(name = "系统计算的下次计划日期", readConverterExp = "可=空")
    private Date nextPlanDate;

    /** 到期生成工单策略：手动/自动 */
    @Excel(name = "到期生成工单策略：手动/自动")
    private String genPolicy;

    /** 计划状态 */
    @Excel(name = "计划状态")
    private String status;

    /** 创建人 */
    @Excel(name = "创建人")
    private String createBy;

    @Excel(name = "更新人")
    private String updateBy;


    /** 逻辑删除：0-否 1-是 */
    @Excel(name = "逻辑删除：0-否 1-是")
    private Integer deleted;

    /** $column.columnComment */
    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
    private String tradeCodeNorm;

    /** 标题/设备名称 模糊搜索 */
    private String keyword;
    /** 计划日期范围-起(yyyy-MM-dd) */
    private String beginDate;
    /** 计划日期范围-止(yyyy-MM-dd) */
    private String endDate;

    /** 0=普通 1=特殊 */
    private Integer spareType;

    private Integer planHour;

    /** 非表字段：计划使用的备件列表 */
    private List<AssetMtplanSpare> spares;


    /** 特殊模式用：只在接收/返回时携带 */
    private List<SpecialItemDTO> specialItems;

}
